今天進入生產環境部署整備階段,完成項目包含:
requirements.txt) — 補上影像處理(Pillow)與消息推播(line-bot-sdk)等關鍵 SDK,避免容器執行時產生 ModuleNotFoundError。.dockerignore 檔案 — 排除 .venv、__pycache__、.env 與 .db 等暫存與敏感檔案,最佳化 Image 建置體積與資安防護。Dockerfile — 選用 Python 3.11-slim 基礎鏡像,封裝系統相依套件、安裝 Python Dependencies 並配置運行環境。過去九天的開發中系統運行於本地開發環境。為了讓系統能穩定部署至雲端伺服器(如 GCP、AWS 或地端伺服器),容器化有核心優勢。
1. 確認完整的 requirements.txt
請確保專案根目錄下的 requirements.txt 包含了影像處理與 LINE SDK 等所有必須套件:
Flask==3.0.3
google-genai==1.75.0
gTTS==2.5.1
python-dotenv==1.0.1
requests==2.32.3
Pillow
line-bot-sdk
2. 建立 .dockerignore
在專案根目錄建立 .dockerignore,避免將無關與敏感檔案打包進容器:
.venv
__pycache__
*.pyc
*.pyo
*.pyd
.env
*.db
static/audio/*.mp3
.git
.gitignore
3. 建立 Dockerfile
在專案根目錄建立 Dockerfile:
# 採用輕量化 Python 3.11 基礎鏡像
FROM python:3.11-slim
# 設定工作目錄
WORKDIR /app
# 設定環境變數:防止 Python 產生 .pyc 與強制無緩衝輸出日誌
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# 安裝系統層級工具
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
&& rm -rf /var/lib/apt/lists/*
# 複製依賴檔案並安裝
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 複製專案原始碼
COPY . .
# 建立存放語音檔的 static/audio 目錄
RUN mkdir -p static/audio
# 暴露服務連接埠
EXPOSE 5000
# 啟動命令:執行 Flask 應用程式
CMD ["python", "app.py"]
1. 構建 Docker Image
在 Terminal 執行 Image 構建指令:
docker build -t prescription-vlm:v1.0 .
2. 啟動 Docker 容器
以環境變數檔案(.env)啟動容器並映射 5000 Port:
docker run -d -p 5000:5000 --env-file .env --name prescription_service prescription-vlm:v1.0
3. 驗證容器服務
執行 Health Check 確認容器內的 API 服務正常:
curl http://127.0.0.1:5000/ping
4. 預期輸出結果
{
"service": "PrescriptionVLM Engine",
"status": "online"
}
測試成功後,將完整的 Docker 設定與 requirements.txt 提交至 GitHub:
git add .
git commit -m "保留雙引號 改填寫自己要記錄的標記 ex.鐵人賽第十天"
git push
今天完成了 PrescriptionVLM 後端服務的容器化封裝,系統現在具備跨平台部署能力。
明天(Day 11)進入 System Integration 與 End-to-End Testing,進行 API 壓力測試與邊界條件異常處理驗證。